﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.ComponentModel;
using Tecnosop.Dominio;
using System.ComponentModel.DataAnnotations;
using System.Web.Mvc;
using Tecnosop.Dominio.Validadores;
//using MVCControlsToolkit.DataAnnotations;

namespace Tecnosop.WebUI.Models
{
    public class ConvenioViewModel
    {
        [DisplayName("Rut del cliente")]
        [Required(ErrorMessage = " Ingrese el rut del cliente")]
        [Remote("ExisteRut", "Convenio", ErrorMessage = "El rut ingresado no existe en la base de datos")]
        [RutValidator(ErrorMessage = "El dígito verificador es incorrecto")]
        [RegularExpression(@"\d{1,10}[-][0-9kK]{1}$", ErrorMessage = "El rut ingresado no es correcto")]
        public string RUT_CLIENTE { get; set; }

        [DisplayName("Fecha inicio convenio")]
        [DataType(DataType.Date)]
        [Required(ErrorMessage = "Ingrese una fecha de inicio del convenio")]
        //[IsDateAfter("FECHA_VENCIMIENTO", ErrorMessage = "La fecha de término no puede ser antes o el mismo día del inicio del convenio")]
        public DateTime FECHA_CONVENIO { get; set; }

        [DisplayName("Día de facturación")]
        [Range(1, 31, ErrorMessage = "El {0} debe ser un número entre 1 y 31")]
        [DataType("Numero")]
        [Required(ErrorMessage = "Ingrese un {0}")]
        public int DIA_FACTURACION { get; set; }

        [DisplayName("Fecha de término")]
        [DataType(DataType.DateTime)]
        //[DateRange(DynamicMinimum = "FECHA_CONVENIO", ErrorMessage = "La fecha de término no puede ser antes o el mismo día del inicio del convenio")]
        public Nullable<System.DateTime> FECHA_VENCIMIENTO { get; set; }

        [DisplayName("Periodo de facturación")]
        [Required(ErrorMessage = "Ingrese cada cuantos meses se debe facturar")]
        [Range(1, Int32.MaxValue, ErrorMessage = "El {0} no puede ser menor a 1")]
        [DataType("Numero")]
        public int PERIODO_DE_FACTURACION { get; set; }

        [DisplayName("Nombre")]
        public string NOMBRE_REPRESENTANTE_LEGAL { get; set; }

        [DisplayName("Rut")]
        [RegularExpression(@"\d{1,10}[-][0-9kK]{1}$", ErrorMessage = "El rut ingresado no es correcto")]
        [RutValidator(Nullable: true, ErrorMessage = "El dígito verificador es incorrecto")]
        public string RUT_REPRESENTANTE_LEGAL { get; set; }

        [DisplayName("Teléfono")]
        public string TELEFONO_REPRESENTANTE_LEGAL { get; set; }
    }

    public class DetallesConvenioViewModel
    {
        [DisplayName("Número convenio")]
        public int NUMERO_CONVENIO { get; set; }

        [DisplayName("Rut del cliente")]
        public string RUT_CLIENTE { get; set; }

        [DisplayName("Nombre del cliente")]
        public string NOMBRE_CLIENTE { get; set; }

        [DisplayName("Fecha inicio convenio")]
        public DateTime FECHA_CONVENIO { get; set; }

        [DisplayName("Día de facturación")]
        public int DIA_FACTURACION { get; set; }

        [DisplayName("Fecha de término")]
        public Nullable<System.DateTime> FECHA_VENCIMIENTO { get; set; }

        [DisplayName("Nombre")]
        //[DefaultValue(" ")]
        public string NOMBRE_REPRESENTANTE_LEGAL { get; set; }

        [DisplayName("Rut")]
        //[DefaultValue(" ")]
        public string RUT_REPRESENTANTE_LEGAL { get; set; }

        [DisplayName("Teléfono")]
        //[DefaultValue(" ")]
        public string TELEFONO_REPRESENTANTE_LEGAL { get; set; }

        public IEnumerable<EquipoEnConvenio> EquiposEnConvenio { get; set; }
    }

    public class EditConvenioViewModel
    {
        [DisplayName("Número convenio")]
        public int NUMERO_CONVENIO { get; set; }

        [DisplayName("Rut del cliente")]
        public string RUT_CLIENTE { get; set; }

        [DisplayName("Nombre del cliente")]
        public string NOMBRE_CLIENTE { get; set; }

        [DisplayName("Fecha inicio convenio")]
        [DataType(DataType.DateTime)]
        [Required(ErrorMessage = "Ingrese una fecha de inicio del convenio")]
        public DateTime FECHA_CONVENIO { get; set; }

        [DisplayName("Día de facturación")]
        [Range(1, 31, ErrorMessage = "El {0} debe ser un número entre 1 y 31")]
        [DataType("Numero")]
        [Required(ErrorMessage = "Ingrese un {0}")]
        public int DIA_FACTURACION { get; set; }

        [DisplayName("Fecha de término")]
        [DataType(DataType.DateTime)]
        public Nullable<System.DateTime> FECHA_VENCIMIENTO { get; set; }

        [DisplayName("Nombre")]
        public string NOMBRE_REPRESENTANTE_LEGAL { get; set; }

        [DisplayName("Rut")]
        [RegularExpression(@"\d{1,10}[-][0-9kK]{1}$", ErrorMessage = "El rut ingresado no es correcto")]
        [RutValidator(Nullable: true, ErrorMessage = "El dígito verificador es incorrecto")]
        public string RUT_REPRESENTANTE_LEGAL { get; set; }

        [DisplayName("Teléfono")]
        public string TELEFONO_REPRESENTANTE_LEGAL { get; set; }
    }

    public class GridCreateEquipoEnConvenio : EQUIPO_EN_CONVENIO
    {
        //public int NUMERO_CONVENIO { get; set; }
        public int NUMERO_CONSIGNACION { get; set; }
        //public int CONTADOR_SALIDA_BODEGA_EQUIPO { get; set; }
        //public string DIRECCION_EQUIPO { get; set; }
        //public DateTime? FECHA_INSTALACION { get; set; }
        //public string NOMBRE_ENCARGADO_EQUIPO { get; set; }
        //public string TELEFONO_ENCARGADO_EQUIPO { get; set; }
    }
    
    public class EquipoEnConvenio
    {
        [ScaffoldColumn(false)]
        public int NUMERO_CONVENIO { get; set; }

        [ScaffoldColumn(false)]
        public int NUMERO_EQUIPO_EN_CONVENIO { get; set; }

        [Required(ErrorMessage = "Debe ingresar una consignación")]
        [DisplayName("Consignación")]
        [Remote("VerificarConsignacion", "Convenio", AdditionalFields = "NUMERO_CONSIGNACION_ORIGINAL")]
        public int NUMERO_CONSIGNACION { get; set; }

        [HiddenInput(DisplayValue = false)]
        [DisplayName("")]
        public int NUMERO_CONSIGNACION_ORIGINAL { get; set; }

        [Required(ErrorMessage = "Ingrese el contador inicial del equipo")]
        [DisplayName("Contador inicial blanco y negro")]
        public int CONTADOR_SALIDA_BODEGA_EQUIPO_BN { get; set; }

        [Required(ErrorMessage = "Ingrese el contador inicial del equipo")]
        [DisplayName("Contador inicial color")]
        public int CONTADOR_SALIDA_BODEGA_EQUIPO_COLOR { get; set; }

        //[Required(ErrorMessage = "Ingrese la fecha de instalación del equipo")]
        [DisplayName("Fecha de instalación")]
        public DateTime? FECHA_INSTALACION { get; set; }

        [DisplayName("Dirección del equipo")]
        public string DIRECCION_EQUIPO { get; set; }

        [DisplayName("Nombre encargado")]
        public string NOMBRE_ENCARGADO_EQUIPO { get; set; }

        [DisplayName("Teléfono engargado")]
        public string TELEFONO_ENCARGADO_EQUIPO { get; set; }

        [DisplayName("Tipo de equipo")]
        [ScaffoldColumn(false)]
        public string TIPO_EQUIPO { get; set; }

        [DisplayName("Marca del equipo")]
        [ScaffoldColumn(false)]
        public string MARCA_EQUIPO { get; set; }

        [DisplayName("Modelo")]
        [ScaffoldColumn(false)]
        public string MODELO_EQUIPO { get; set; }
    }

    public class EditEquipoEnConvenio
    {
        [DisplayName("Número de convenio")]
        [HiddenInput(DisplayValue = true)]
        public int NUMERO_CONVENIO { get; set; }

        [DisplayName("ID equipo en convenio")]
        [HiddenInput(DisplayValue = true)]
        public int NUMERO_EQUIPO_EN_CONVENIO { get; set; }

        [DisplayName("Número de serie")]
        [HiddenInput(DisplayValue = true)]
        public string NUMERO_SERIE { get; set; }

        [DisplayName("Contador inicial blanco y negro")]
        [UIHint("Numero")]
        public int? CONTADOR_SALIDA_BODEGA_EQUIPO_BN { get; set; }

        [DisplayName("Contador inicial color")]
        [UIHint("Numero")]
        public int? CONTADOR_SALIDA_BODEGA_EQUIPO_COLOR { get; set; }

        [DisplayName("Fecha de instalación")]
        public Nullable<System.DateTime> FECHA_INSTALACION { get; set; }

        [DisplayName("Nombre")]
        public string NOMBRE_ENCARGADO_EQUIPO { get; set; }

        [DisplayName("Dirección donde está el equipo")]
        public string DIRECCION_EQUIPO { get; set; }

        [DisplayName("Teléfono")]
        public string TELEFONO_ENCARGADO_EQUIPO { get; set; }
    }

    public class FormasDePagoViewModel
    {
        public int NUMERO_CONVENIO { get; set; }
        public int NUMERO_EQUIPO_EN_CONVENIO { get; set; }

        public bool HayCargoFijo { get; set; }
        public decimal PrecioCargoFijo { get; set; }
        public bool UFCargoFijo { get; set; }

        public bool HayMinimoGarantizadoBlancoYNegro { get; set; }
        public int PrecioMinGBlancoyNegro { get; set; }
        public decimal PrecioHojaBlancoynegro { get; set; }
        public bool UFMinBN { get; set; }

        public bool HayMinimoGarantizadoColor { get; set; }
        public int PrecioMinGColor { get; set; }
        public decimal PrecioHojaColor { get; set; }
        public bool UFMinColor { get; set; }
    }

    public class ConvenioSinFacturarViewModel
    {
        [DisplayName("Número convenio")]
        public int Numero_convenio { get; set; }

        [DisplayName("Rut")]
        public string Rut{ get; set; }

        [DisplayName("Dia facturación")]
        public int Dia_facturacion { get; set; }

        public List<MEDICIONES> mediciones;
    }

   
  

    public class BusquedaConvenioViewModel
    {
        [DisplayName("Criterios de búsqueda")]
        [UIHint("Enum")]
        [DataType("Criterios")]
        public CriteriosDeBusquedaConvenio Criterios { get; set; }

        [Required(ErrorMessage = "Debe ingresar algún término para la búsqueda")]
        [Remote("ValidaBusquedaVacia", "Convenio", AdditionalFields = "Criterios")]
        public string AreaBusqueda { get; set; }

        [DisplayName("Buscar sólo convenios vigentes")]
        public bool SoloVigentes { get; set; }
    }

    public class ResultadoBusquedaConvenioViewModel
    {
        public IEnumerable<CONVENIO> Resultado { get; set; }
        public string CriterioParaOrdenar { get; set; }
        //public CriteriosDeBusquedaCliente CriterioParaOrdenar { get; set; }
    }

    public enum CriteriosDeBusquedaConvenio
    {
        [Description("Número de convenio")]
        Numero,
        [Description("Rut cliente")]
        Rut,
        [Description("Nombre cliente")]
        Nombre
    }

    public enum DiasDeLaSemana
    {
        Lunes = 1,
        Martes,
        [Description("Miércoles")]
        Miercoles,
        Jueves,
        Viernes,
        [Description("Sábado")]
        Sabado,
        Domingo
    }
}
